/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package compumundohipermegared;

import ConstantesProcotolo.Protocolo;
import clasesJXTA.AdministradorJXTA;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.jxta.socket.JxtaMulticastSocket;

/**
 *
 * @author Arkan
 */
public class Guardador 
{
    private AdministradorJXTA administradorJxta;
    
    private Compumundohipermegared compumundohipermegared;
    
    private EnviadorMensajesGuardar enviadorMensajesGuardar;
    
    private RecibidorMensajesGuardar recibidorMensajesGuardar;
    /***
     * socket para guardar
     */
    JxtaMulticastSocket ms;
    
    public Guardador( AdministradorJXTA administradorJXTA, Compumundohipermegared compumundohipermegared )
    {
        this.administradorJxta = administradorJXTA;
        this.compumundohipermegared = compumundohipermegared; 
        try {
            
             ms = new JxtaMulticastSocket(administradorJXTA.getNetPeerGroup( ), administradorJXTA.getPropagatePipeAdv( ) );
            InetAddress group = InetAddress.getByName(Compumundohipermegared.DIRECCION_MULTICAST_GUARDAR);
            ms.joinGroup(group);
            ms.setBroadcast(true);
            ms.setSoTimeout(0);
            
            
            enviadorMensajesGuardar = new EnviadorMensajesGuardar(compumundohipermegared, administradorJXTA);
            
            recibidorMensajesGuardar = new RecibidorMensajesGuardar(ms, this);
            recibidorMensajesGuardar.start();
        } catch (IOException ex) {
            Logger.getLogger(Guardador.class.getName()).log(Level.SEVERE, null, ex);
        }
       
        
    }
    /**
     * anuncia a los demás que toca guardar el estado
     * @param archivoEstado 
     */
    void anunciarGuardarEstado(String archivoEstado) {
        enviadorMensajesGuardar.guardarEstadosDelSistema(archivoEstado);
    }
    /**
     * guarda el estado del sistema, le dice a compumundohipermegared que lo haga
     * @param nombreArchivo 
     */
    void guardarEstado(String nombreArchivo) {
        compumundohipermegared.salvarEstado(nombreArchivo);
    }

    void cargarEstado(String nombreArchivo) {
        compumundohipermegared.cargarEstado(nombreArchivo);
    }

    void anunciarCargarEstado(String archivoEstado) {
        enviadorMensajesGuardar.cargarEstadosDelSistema(archivoEstado);
    }
    
    
}
